﻿//Install Visual T4 for syntax highlighting!
//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591



using System;

namespace Sponsorship.Domain.Sponsorships
{
		
    public sealed class EnterSponsorship : ICommand
    {
        public Guid SponsorshipId { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public Nullable<DateTime> StartDate { get; private set; }
        public Nullable<DateTime> EndDate { get; private set; }
        public Period Period { get; private set; }
        public string Comment { get; private set; }
        
        public EnterSponsorship () {}
        public EnterSponsorship (Guid sponsorshipId, Guid sponsorshipTypeId, Guid personId, Guid sponsorId, decimal amount, Nullable<DateTime> startDate, Nullable<DateTime> endDate, Period period, string comment)
        {
            SponsorshipId = sponsorshipId;
            SponsorshipTypeId = sponsorshipTypeId;
            PersonId = personId;
            SponsorId = sponsorId;
            Amount = amount;
            StartDate = startDate;
            EndDate = endDate;
            Period = period;
            Comment = comment;
        }
    }
    
    public sealed class SponsorshipEntered : Event
    {
        public Guid SponsorshipId { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public Nullable<DateTime> StartDate { get; private set; }
        public Nullable<DateTime> EndDate { get; private set; }
        public Period Period { get; private set; }
        public string Comment { get; private set; }
        
        public SponsorshipEntered () {}
        public SponsorshipEntered (Guid sponsorshipId, Guid sponsorshipTypeId, Guid personId, Guid sponsorId, decimal amount, Nullable<DateTime> startDate, Nullable<DateTime> endDate, Period period, string comment)
        {
            SponsorshipId = sponsorshipId;
            SponsorshipTypeId = sponsorshipTypeId;
            PersonId = personId;
            SponsorId = sponsorId;
            Amount = amount;
            StartDate = startDate;
            EndDate = endDate;
            Period = period;
            Comment = comment;
        }
    }
    
    public sealed class ChangeSponsorship : ICommand
    {
        public Guid SponsorshipId { get; private set; }
        public int Version { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public Nullable<DateTime> StartDate { get; private set; }
        public Nullable<DateTime> EndDate { get; private set; }
        public Period Period { get; private set; }
        public string Comment { get; private set; }
        
        public ChangeSponsorship () {}
        public ChangeSponsorship (Guid sponsorshipId, int version, Guid sponsorshipTypeId, Guid personId, Guid sponsorId, decimal amount, Nullable<DateTime> startDate, Nullable<DateTime> endDate, Period period, string comment)
        {
            SponsorshipId = sponsorshipId;
            Version = version;
            SponsorshipTypeId = sponsorshipTypeId;
            PersonId = personId;
            SponsorId = sponsorId;
            Amount = amount;
            StartDate = startDate;
            EndDate = endDate;
            Period = period;
            Comment = comment;
        }
    }
    
    public sealed class SponsorshipChanged : Event
    {
        public Guid SponsorshipId { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public Nullable<DateTime> StartDate { get; private set; }
        public Nullable<DateTime> EndDate { get; private set; }
        public Period Period { get; private set; }
        public string Comment { get; private set; }
        
        public SponsorshipChanged () {}
        public SponsorshipChanged (Guid sponsorshipId, Guid sponsorshipTypeId, Guid personId, Guid sponsorId, decimal amount, Nullable<DateTime> startDate, Nullable<DateTime> endDate, Period period, string comment)
        {
            SponsorshipId = sponsorshipId;
            SponsorshipTypeId = sponsorshipTypeId;
            PersonId = personId;
            SponsorId = sponsorId;
            Amount = amount;
            StartDate = startDate;
            EndDate = endDate;
            Period = period;
            Comment = comment;
        }
    }
    
    public sealed class DeleteSponsorship : ICommand
    {
        public Guid SponsorshipId { get; private set; }
        public int Version { get; private set; }
        
        public DeleteSponsorship () {}
        public DeleteSponsorship (Guid sponsorshipId, int version)
        {
            SponsorshipId = sponsorshipId;
            Version = version;
        }
    }
    
    public sealed class SponsorshipDeleted : Event
    {
        public Guid SponsorshipId { get; private set; }
        
        public SponsorshipDeleted () {}
        public SponsorshipDeleted (Guid sponsorshipId)
        {
            SponsorshipId = sponsorshipId;
        }
    }

}